package entity;
import java.awt.Color;
import boundary.Adapter;
import desktop_fields.Street;

public class LaborCamp extends Ownable {

	public LaborCamp(String title, String subtitle, String desc, int price, int cnsq){
		super(title,subtitle,desc,price,cnsq);
	}

	/**
	 * Udfører konsekvens af at lande på et felt.
	 * Hvis spilleren selv ejer feltet sker intet.
	 * Hvis feltet ikke har en ejer kan spilleren købe feltet (hvis han har råd).
	 * Hvis feltet er ejet af en anden spiller skal der betales afgift (100 x værdien af et nyt terningeslag).
	 */
	public void landOnField(Spiller spiller){
		//viser feltbeskrivelsen
		Adapter.showFieldDesc(spiller);
		// Hvis feltet ejes af en spiller slås et nyt slag og der betales 100 x slagets sum
		if (owner != null && owner != spiller){
			DiceCup dicecup = new DiceCup();
			Adapter.rollDice(spiller.getName());
			dicecup.rollDice();			
			owner.getKonto().updBalance(consequence * dicecup.sum());
			spiller.getKonto().updBalance(-consequence * dicecup.sum());
			Adapter.setDice(dicecup.getDice()[0], 0, 4, 3, dicecup.getDice()[1], 0, 6, 3); // Opdaterer GUI'ens terninger med ekstraslaget.
		}
		// Hvis der ikke er en ejer har spilleren mulighed for at købe feltet hvis han har råd til det
		else if (owner == null){

			if (spiller.getKonto().getBalance() >= price){
				boolean choice = Adapter.buyField();
				if (choice == true){
					owner = spiller;
					spiller.getKonto().updBalance(-price);
					Adapter.setOwner(owner.getPosition(), owner.getName());
					Adapter.setSubText(owner.getPosition(), Integer.toString(consequence) + " * sum");
				}
				// Der sker intet hvis spilleren ikke ønsker at købe det
				else if (choice == false) {
				}
			}
			else  {
				Adapter.cannotAfford();
			}
		}
		else if (owner == spiller){
			Adapter.yourField();
		}
	}

	/**
	 * Returnerer base consequence for feltet. Denne konsekvens skal ganges med summen af et terningeslag.
	 */
	protected int getRent(){
		return consequence;
	}
	
	
	/**
	 * Returnerer ejeren af feltet.
	 */
	public Spiller getOwner(){
		return this.owner;
	}
	
	public desktop_fields.Field createGuiField() {
		Color laborColor = new Color(255, 255, 0);
		
		desktop_fields.Field f = new Street.Builder()
		.setTitle(title)
		.setSubText(subtitle + price)
		.setDescription(description)
		.setFgColor(Color.BLACK)
		.setBgColor(laborColor)
		.setRent("")
		.build();
		return f;
	}
}